all files / src/helpers/ bid.helpers.ts

96.15% Statements 25/26
100% Branches 4/4
93.33% Functions 14/15
95.83% Lines 23/24
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50    26×     27×     25×     26× 58× 26×       94×     11× 44×                   81×          
import { PlayersBid, Game, Player } from '../game.interfaces';
import * as _ from 'lodash';
 
export function isMaxBid({ bid }: PlayersBid): boolean {
    return bid === 300;
}
 
export function isAchievableBid({ bid }: PlayersBid): boolean {
    return bid <= 300;
}
 
export function isValidBidValue({ bid }: PlayersBid): boolean {
    return parseInt(bid + "") === parseFloat(bid + "") && bid % 10 === 0;
}
 
export function hasTwoPasses(bids: PlayersBid[]): boolean {
    return _.chain(bids)
        .filter((playerBid: PlayersBid) => playerBid.pass)
        .thru(passedBids => passedBids.length === 2)
        .value();
}
 
export function getBidWinner(bids: PlayersBid[]): PlayersBid {
    return _.find(bids, player => !player.pass);
}
 
export function getUniqueBidders(bids: PlayersBid[]): string[] {
    return _.reduce(bids, (bidders, bid) => {
        return bidders.includes(bid.player) ? bidders : [bid.player, ...bidders];
    }, []);
}
 
export function isBidder(bids: PlayersBid[], player: string): boolean {
    return _.chain(getUniqueBidders(bids))
        .map('player')
        .includes(player)
        .value();
}
 
export function getHighestBid(bids: PlayersBid[]): PlayersBid {
    return _.maxBy(bids, (pb: PlayersBid) => pb.bid);
}
 
export function hasPlayerAlreadyPassed(bids: PlayersBid[], playerId: string): boolean {
    return _.some(bids,  {player: playerId, pass: true});
}
 
export function noOneParticipatedInBidding(bids: PlayersBid[]): boolean {
    return getBidWinner(bids).bid === 100;
}